IDOR (Insecure Direct Object Reference) Nedir?

Bir web sitesine giriş yaptıktan sonra bize çeşitli id’ler tanımlar. Bize verilen id arka planda işler. Bir alışveriş sitesiyle örnek verelim: “alışveriş.com” şeklinde bir siteye kaydolmuş olalım. Bize sitenin yapısına göre bir id tanımlayacaktır. Biz alışveriş sepetine bir ürün eklemiş olalım ve bize ait olan bir id’de tanımlanmış olur. Bunu bir kimlik numarası gibi düşünebiliriz. Bu kimlik numarası (id) veri tabanına kaydolur. IDOR nedir konusuna gelecek olursak; Insecure Direct Object Reference yani güvensiz doğrudan nesne başvurusu anlamına gelir. Saldırganın nesneleri manipüle ederek bir başka kullanıcı-yönetici hesabına ulaşması diyebiliriz. Örneğin alışveriş sitesine kayıtlı bir kullanıcının id’si 45 olsun. Saldırgan kendi id’sini 45 olarak manipüle edebilirse yetkisi bulunmadığı bir hesaba giriş yapmış olabilecek. Bunu sadece bir kullanıcıya erişme olarak düşünmemeliyiz, yetkimiz olmayan bir dosyaya ulaşmamızda veya aynı şekilde alışveriş sitesinde değeri 1000 TL olan bir ürünü ile 1 TL’ ye almak da idor açığıdır. Owasp Top 10 da yer alıp en çok karşılaşılabilecek olan bu zafiyet; bir saldırgan tarafından yönetici haklara kadar gidebilecek bir zafiyettir. 

 

Nasıl Test Edilir?

Kullanıcı verileri içeren url’ lerde değişiklik yapılarak başka bir kullanıcı hesabına erişilebilir. Örneğin:

https://idor-deneme[.]com/customer_account?customer_number=12115

şeklinde bir url gördük customer_number=12114 şeklinde oynamalar yaparak bize ait olmayan hesaba erişim elde edebiliriz.

Yine aynı şekilde url üzerinde 

https://idor-deneme/static/12114.txt şeklinde kullanıcı bilgilerinin bulunduğu bir dosyaya erişim elde edebiliriz.

Üste gördüğümüz iki açık bulma şekli de bulma ihtimalimiz genelde biraz daha düşüktür. Genelde gidip gelen paketleri yönetmemiz açık bulmamız için daha mümkündür. Paketleri görüp üzerinde oynamalar için BurpSuite aracını kullanarak Bwapp üzerinde bir idor denemesi yapalım.

image

 

Yukarıdaki bilgiye göre 1 bilet 15 EUR ve 10 tane almak istediğimizde 150 EUR ödememiz gerekiyor. Bu kısımda biz paketler ile oynama yaparak 10 adet bileti daha ucuza almış olacağız. Bilet sayısına 10 yazıp confirm diyorum ve BurpSuite paketi karşıma şu şekilde çıkıyor:

image

Bu kısımda ticket_price=1 yapacağız ve BurpSuite üzerinden ticket_price=1 yaptıktan sonra Forward diyoruz.

image

Gördüğümüz gibi idor zafiyetiyle karşılaştık ve 1 bilet parasını 15 dolar yerine 1 dolara indirmiş olduk.

 

Bir de PortSwigger’ ın laboratuvarındaki idor zafiyetini inceleyelim. Bu bölümde de BurpSuite kullanacağız. Bizden Carlos’un şifresini bulmamızı istemiş bizde Carlos’un şifresinin bulunduğu txt dosyasına erişerek Carlos hesabına giriş yapacağız.

image

Karşımıza bu ekran geliyor ve bu ekranda satın almaya (sepet sayfasında da karşılaşabileceğimiz idor olabiliyor) dair herhangi bir şey yok idor açığı bulabileceğim yerler “my account” kısmında olabilir ve “live chat” kısmında da olması muhtemel. Live Chat seçeneğine tıklıyoruz.

 

Ve view transcript seçeneğine tıklıyoruz. Get paketinde /2.txt görüyoruz.

image

Sıralamadan yola çıkarak 2.txt yerine 1.txt yazıyoruz. Ve Forward dediğimiz anda bilgisayarımıza 1.txt şeklinde dosya iniyor.

image

Resimde gördüğümüz şekilde Carlos’un parolasına ulaşmış oluyoruz.image

image

Peki Gerçek Web Sitelerinde de Laboratuvarlardaki Gibi Çıkar Mı?

Tamamen sitenin yapısına göre değişmekle beraber laboratuvardaki çözdüğümüz idor açıklarından daha rahat bir şekilde de karşımıza çıkması mümkün. Örnek vermek gerekirse:

 

POST /api/v2/orders 

HTTP/1.1 Host: idorlusite.com Accept: application/json Accept-Language: en-US,en;q=0.5 Content-Type: application/json Content-Length: 179 DNT: 1 Connection: close

{"payment":{"provider_method_account":"dfadfasdsd","parameters":{}},"action":"order","plan_id":153,"is_installment":false}

{"id":545123,"user_id":63495165,"confirmation":{"id":545123,"created_at":"2019-12-04 17:16:14","updated_at":"2019-12-04 17:16:14","type":"redirect","value":"https:\/\/pay.gocardless.com\/flow\/RE000W16X7XH4JCXJZ623MS6H7W316N3"}}

 

 

Şeklinde de karşımıza çıkabilir. user_id bölümündeki rakamları değiştirerek dahi idor açığına ulaşmak mümkündür.

 

Aşağıda Birkaç Idor Örnek Raporlarını Bulabilirsiniz:

https://hackerone.com/reports/980511

https://hackerone.com/reports/293490

https://hackerone.com/reports/751577